package com.cskaoyan.javase.oop1._11static._0introduction._1new;

/**
 * static修饰成员变量,表示静态成员变量,是属于类的
 * 语法:
 * 1.需要定义在类的成员位置
 * 2.[访问权限修饰符] static 数据类型 变量名;
 *
 * 静态成员变量的特点:
 * 1.有默认初始化,具有默认值,和成员变量的默认值是一样的
 * 2.静态成员变量属于类,被全体对象所共享.使用任一引用修改,然后再用其他引用访问,都会受到影响.
 *
 * 3.静态成员变量不是属于对象的,所以不应该使用"对象名."去访问它
 * 因为这种访问方式显得,这个变量是属于对象的
 * 既然它是属于类的,所以应该使用"类名."去访问它
 *
 * 4.静态成员变量的创建以及使用,和对象都没有任何关系
 *
 * static关键字除了能够修饰成员变量,也可以修饰成员方法.称之为"静态成员方法"
 * 语法:
 * [访问权限修饰符] static 返回值类型 方法名(形参列表){
 *     // 方法体
 * }
 * 静态成员方法的特点:
 * 1.属于类,属于全体对象所共享.不再像成员方法,属于对象.
 * 2.应该使用"类名."调用,不需要创建对象,就可以调用静态成员方法.
 * 禁止使用"对象名."调用它
 *
 * 3.特殊的,静态成员变量,静态成员方法,它们的调用是在同类中时,可以省略"类名"
 *
 * @since 09:59
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    static String var;
    public static void test(){}
    public static void main(String[] args) {
        System.out.println(var);
        test();
        // Java43thStudent s1 = new Java43thStudent("张三", 18, "男", 100);
        // Java43thStudent s2 = new Java43thStudent("李四", 28, "女", 200);
        // Java43thStudent s3 = new Java43thStudent("王二", 38, "男", 300);

        /*
            Static member 'com.cskaoyan.javase.oop1._11static._0introduction._1new.Java43thStudent.schoolInfo' accessed via instance reference
         */
        /*System.out.println(s1.schoolInfo);
        System.out.println(s2.schoolInfo);
        System.out.println(s3.schoolInfo);

        s1.schoolInfo = "王道训练营";
        System.out.println(s2.schoolInfo);
        System.out.println(s3.schoolInfo);*/

        System.out.println(Java43thStudent.schoolInfo);
        Java43thStudent.schoolInfo = "王道训练营";
        System.out.println(Java43thStudent.schoolInfo);

        Java43thStudent.test();
    }
}

// Java43th的学生类,描述学生对象
class Java43thStudent {
    String name;
    int age;
    /*
        性别这个属性的定义
        推荐使用String gender;
        具体用什么可以根据公司的安排
        不推荐使用boolean isMale/isFemale;
     */
    String gender;
    int stuId;
    // 学校信息属于类,用static修饰它
    static String schoolInfo;

    // 构造器

    public Java43thStudent(String name, int age, String gender, int stuId) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.stuId = stuId;
    }

    public void eat() {
        System.out.println("吃饭最重要!");
    }

    public void study() {
        System.out.println("学习第二重要!");
    }

    // 定义静态成员方法
    public static void test() {
        System.out.println("test~~");
    }
}